<?php
namespace app\admin\model;
use think\Model;
use think\Db;

/**
 * 后台权限模型
 * @package app\admin\model
 */
class Auth extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'adm_auth';

    protected $pk = 'auth_id';

    //获取顶级权限列表
    public function getAuth(){
    	$auth = $this::field('auth_id,auth_name')->where('auth_pid','in','0,1')->select()->toArray();
    	return $auth;
    }

    //获取所有路由
    public function getAllAuth(){
    	$allAuth = $this::field('auth_id,auth_name')->select()->toArray();
    	return $allAuth;
    }

    //获取一条记录
    public function getOne($auth_id=1){
        $auth = $this::field('auth_id,auth_name,auth_c_a,auth_pid')->where('auth_id',$auth_id)->find()->toArray();
        return $auth;
    }

    //更新数据
    public function upd($data){
        return $this::update($data);
    }

    /**
     * 检测当前权限是否存在子级权限
     * @param  integer $authId 待查询的权限主键ID
     * @return boolean         true代表存在子级 false代表没有子级
     */
    public function checkChild($authId)
    {
        $where = [
            'auth_pid' => $authId
            ];
        return $this::where($where)->find(); // 如果有一个都不能删除
    }


    /**
     * 获取当前权限的子级权限主键ID
     * @param  integer $authId 当前权限主键
     * @return array         一维数组
     */
    public function getChild($authId)
    {
        $data = $this::order('order_num , auth_id ')->select()->toArray();

        // return $data;
        return $this->_getChild($data, $authId);
    }

    public function _getChild($data, $authId)
    {
        static $list = array();
        foreach ($data as $k => $v) {

            if($v['auth_pid'] == $authId){
                $list[] = $v['auth_id'];
                $this->_getChild($data, $v['auth_id']);
            }

        }
        return $list;
    }

    /**
     * 获取层级关系数据
     * @return array 层级关系数据
     */
    public function getTree()
    {
        // 使用递归取出数据
        $data = $this::select()->toArray();
        // 递归
        return $this::_getTree($data);

    }
    /**
     * 递归处理数据
     * @param  array  $data  待处理的数据
     * @param  integer $pid   上级权限ID
     * @param  integer $level 层级
     * @return array         拥有层级关系的数据
     */
    public function _getTree($data, $pid = 0, $level = 0)
    {
        // 递归处理数据
        static $list = array();
        foreach ($data as $k => $v) {
            if($v['auth_pid'] == $pid){
                $v['level'] = $level;
                $list[] = $v;
                $this::_getTree($data, $v['auth_id'], $level+1);
            }
        }
        return $list;
    }

}
